#!/bin/bash

# 检查是否提供了文件名参数
if [ $# -ne 1 ]; then
    echo "用法: $0 <文件名>"
    exit 1
fi

# 获取文件名参数
input_file="$1"

# 检查文件是否存在
if [ ! -f "$input_file" ]; then
    echo "文件 $input_file 不存在！"
    exit 1
fi

# 初始化变量
sum=0
declare -a sum_array
group_count=0

# 逐行读取文件
while IFS= read -r line; do
    # 检查是否包含时间戳
    if [[ $line =~ [0-9]{4}-[0-9]{2}-[0-9]{2} ]]; then
        # 如果包含时间戳，保存当前组的总和并重置
        if [ $group_count -gt 0 ]; then
            sum_array+=("$sum")
        fi
        sum=0
        ((group_count++))
    else
        # 提取第9列的CPU%数值
        cpu_value=$(echo "$line" | awk '{print $9}')

        # 检查是否是数字
        if [[ $cpu_value =~ ^[0-9]+(\.[0-9]+)?$ ]]; then
            # 累加到当前组的总和
            sum=$(echo "$sum + $cpu_value" | bc)
        fi
    fi
done < "$input_file"

# 添加最后一组的总和
sum_array+=("$sum")

# 输出每组的累加值
for i in "${!sum_array[@]}"; do
    formatted_sum=$(printf "%.1f" "${sum_array[$i]}")
    echo "第 $((i+1)) 组的CPU%累加值: $formatted_sum"
done

# 计算均值、最低值和最高值
total_sum=0
min_value=${sum_array[0]}
max_value=${sum_array[0]}

for value in "${sum_array[@]}"; do
    total_sum=$(echo "$total_sum + $value" | bc)
    if (( $(echo "$value < $min_value" | bc -l) )); then
        min_value=$value
    fi
    if (( $(echo "$value > $max_value" | bc -l) )); then
        max_value=$value
    fi
done

# 计算均值
mean_value=$(echo "scale=1; $total_sum / ${#sum_array[@]}" | bc)

# 格式化输出
formatted_min=$(printf "%.1f" "$min_value")
formatted_max=$(printf "%.1f" "$max_value")
formatted_mean=$(printf "%.1f" "$mean_value")

# 输出统计结果
echo "CPU%均值: $formatted_mean"
echo "CPU%最低值: $formatted_min"
echo "CPU%最高值: $formatted_max"
